package com.yf.exam.modules.trainingarchives.trainingclassinfo.controller;


import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.base.Preconditions;
import com.yf.exam.common.entity.Result;
import com.yf.exam.core.api.dto.BaseIdReqDTO;
import com.yf.exam.core.api.dto.PagingReqDTO;
import com.yf.exam.modules.trainingarchives.organization.service.IOrganizationService;
import com.yf.exam.modules.trainingarchives.trainingclassinfo.dto.req.TrainingClassInfoReqDTO;
import com.yf.exam.modules.trainingarchives.trainingclassinfo.dto.resp.TrainingClassInfoRespDTO;
import com.yf.exam.modules.trainingarchives.trainingclassinfo.service.ITrainingClassInfoService;
import com.yf.exam.modules.trainingarchives.trainingclassschedule.dto.req.TrainingClassScheduleReqDTO;
import com.yf.exam.modules.trainingarchives.trainingclassschedule.dto.resp.TrainingClassScheduleRespDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * <p>
 * 一期一档基础信息表 前端控制器
 * </p>
 *
 * @author author
 * @since 2024-12-29
 */
@Api(tags={"一期一档基础信息"})
@RestController
@RequestMapping("/training-class-info")
@Slf4j
public class TrainingClassInfoController {

    @Resource
    private ITrainingClassInfoService iTrainingClassInfoService;

    @Resource
    private IOrganizationService iOrganizationService;


    /**
     * 新增基础信息
     */
    @PostMapping("/add")
    @ApiOperation(value = "新增基础信息")
    public Result<Boolean> add(@RequestBody TrainingClassInfoReqDTO reqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("TrainingClassInfoController.add.reqDTO:{}", JSON.toJSONString(reqDTO));
            }
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getOrganizationId()), "培训单位ID不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getOrganizationName()), "培训单位名称不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getAddress()), "地址不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getClassName()), "培训班名称不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTargetStudents()), "培训对象不能为空!");
            Preconditions.checkArgument(reqDTO.getPlannedNumber() != null, "计划人数不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTrainingMode()), "培训方式不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTrainingType()), "培训类型不能为空!");
            Preconditions.checkArgument(reqDTO.getTrainingStartDate() != null, "培训开始日期不能为空!");
            Preconditions.checkArgument(reqDTO.getTrainingEndDate() != null, "培训结束日期不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTrainingLocation()), "培训地点不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherName()), "班主任姓名不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherGender()), "班主任性别不能为空!");
            // 对于图片链接或实际图片内容，可以不做非空校验
            // Preconditions.checkArgument(!StringUtils.isBlank(headTeacherPhoto), "班主任照片不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherPhone()), "班主任电话不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherContact()), "班主任邮箱或微信不能为空!");
            return Result.ok(iTrainingClassInfoService.add(reqDTO));
        } catch (Exception e) {
            log.error("TrainingClassInfoController.add.error:{}", e.getMessage(), e);
            return Result.faild("新增基础信息失败!");
        }
    }


    /**
     * 删除项目
     */
    @PostMapping("/delete")
    @ApiOperation(value = "删除基础信息")
    public Result<Boolean> delete(@RequestBody BaseIdReqDTO baseIdReqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("TrainingClassInfoController.delete.elProjectReqDTO:{}", JSON.toJSONString(baseIdReqDTO));
            }
            Preconditions.checkNotNull(baseIdReqDTO.getId(), "基础信息id不能为空!");
            Boolean result = iTrainingClassInfoService.deleteById(baseIdReqDTO.getId());
            return Result.ok(result);
        } catch (Exception e) {
            log.error("TrainingClassInfoController.delete.error:{}", e.getMessage(), e);
            return Result.faild("删除基础信息失败!");
        }

    }

    /**
     * 更新项目
     */
    @PostMapping("/update")
    @ApiOperation(value = "更新基础信息")
    public Result<Boolean> update(@RequestBody TrainingClassInfoReqDTO reqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("TrainingClassInfoController.update.dto:{}", JSON.toJSONString(reqDTO));
            }
            Preconditions.checkNotNull(reqDTO.getId(), "基础信息id不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getOrganizationId()), "培训单位ID不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getOrganizationName()), "培训单位名称不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getAddress()), "地址不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getClassName()), "培训班名称不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTargetStudents()), "培训对象不能为空!");
            Preconditions.checkArgument(reqDTO.getPlannedNumber() != null, "计划人数不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTrainingMode()), "培训方式不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTrainingType()), "培训类型不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getTrainingLocation()), "培训地点不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherName()), "班主任姓名不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherGender()), "班主任性别不能为空!");
            // 对于图片链接或实际图片内容，可以不做非空校验
            // Preconditions.checkArgument(!StringUtils.isBlank(headTeacherPhoto), "班主任照片不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherPhone()), "班主任电话不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getHeadTeacherContact()), "班主任邮箱或微信不能为空!");
//            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getAuditorOpinion()), "审核人意见不能为空!");
//            Preconditions.checkArgument(reqDTO.getAuditTime() != null, "审核时间不能为空!");
//            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getAuditorSignature()), "审核人签字不能为空!");
//            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getApproverOpinion()), "批准人意见不能为空!");
//            Preconditions.checkArgument(reqDTO.getApprovalTime() != null, "批准时间不能为空!");
            // 对于图片链接或实际图片内容，可以不做非空校验
            // Preconditions.checkArgument(!StringUtils.isBlank(approverSignature), "批准人签字不能为空!");
            Boolean result = iTrainingClassInfoService.updateTrainingclasssInfO(reqDTO);
            return Result.ok(result);
        } catch (Exception e) {
            log.error("TrainingClassInfoController.update.error:{}", e.getMessage(), e);
            return Result.faild("更新基础信息失败");
        }
    }

    /**
     * 分页查找
     * @param reqDTO
     * @return
     */
    @ApiOperation(value = "分页查找")
    @PostMapping("/paging")
    public Result<IPage<TrainingClassScheduleRespDTO>> paging(@RequestBody PagingReqDTO<TrainingClassInfoReqDTO> reqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("TrainingClassInfoController.paging.dto:{}", JSON.toJSONString(reqDTO));
            }
            //分页查询并转换
            IPage<TrainingClassInfoRespDTO> page = iTrainingClassInfoService.paging(reqDTO);
            return Result.ok(page);
        } catch (Exception e) {
            log.error("TrainingClassInfoController.paging.error:{}", e.getMessage(), e);
            return Result.faild("查询失败");
        }
    }

    /**
     * 基础信息详情
     */
    @PostMapping("/detail")
    @ApiOperation(value = "获取基础信息详情")
    public Result<TrainingClassInfoRespDTO> detail(@RequestBody BaseIdReqDTO baseIdReqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("TrainingClassInfoController.detail.baseIdReqDTO:{}", JSON.toJSONString(baseIdReqDTO));
            }
            Preconditions.checkArgument(!(baseIdReqDTO.getId() == null), "培训班课程ID不能为空!");
            return Result.ok(iTrainingClassInfoService.getDetail(baseIdReqDTO));
        } catch (Exception e) {
            log.error("TrainingClassInfoController.detail.error:{}", e.getMessage(), e);
            return Result.faild("查询基础信息详情失败!");
        }
    }
}
